/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.eam.gruposenior.gestorLEcciones.controladores;

import edu.eam.gruposenior.gestorLEcciones.entidades.CategoriaSubcategoria;
import edu.eam.gruposenior.gestorLEcciones.entidades.LeccionAprendida;
import edu.eam.gruposenior.gestorLEcciones.util.FactoryEntityManager;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;

/**
 *
 * @author Claudia
 */
public class BuscarLeccionController {

    private EntityManager em;
    private LeccionController leccionController;
    private CategoriaController catController;

    public BuscarLeccionController() {
        em = FactoryEntityManager.getEm();
        leccionController = new LeccionController();
        catController = new CategoriaController();
    }
    
    /**
     * 
     * @param criterio
     * @return 
     */
    public List<LeccionAprendida> buscarLecciones(String criterio){
        List<LeccionAprendida> lecciones=new ArrayList();
        CategoriaSubcategoria raiz=catController.cargarRaiz();
        buscarLeccion(lecciones, raiz, criterio);
        
        return lecciones;
    }
    
    /**
     * Metyodo que recursivamente busca en las lecciones.
     * @param lecciones
     * @param categoria
     * @param criterioBusqueda 
     */
    public void buscarLeccion(List<LeccionAprendida> lecciones,
            CategoriaSubcategoria categoria, String criterioBusqueda) {

        List<LeccionAprendida> leccs = leccionController.leeccionesCategoria(categoria.getId());

        for (LeccionAprendida leccionAprendida : leccs) {

            if (esFactible(leccionAprendida, criterioBusqueda)) {
                lecciones.add(leccionAprendida);
            }

        }

        List<CategoriaSubcategoria> cats = catController.subcatgoriasCategoria(categoria.getId());
        for (CategoriaSubcategoria categoriaSubcategoria : cats) {
            buscarLeccion(lecciones, categoriaSubcategoria, criterioBusqueda);
        }



    }
    /**
     * 
     * @param leccion
     * @param cirterio
     * @return 
     */
    public boolean esFactible(LeccionAprendida leccion, String cirterio) {
        boolean fac = false;

        fac = comparacionCadena(leccion.getDescripcion(), cirterio)
                || comparacionCadena(leccion.getNombre(), cirterio)
                || comparacionCadena(leccion.getPasosSolucion(), cirterio)
                || comparacionCadena(leccion.getDescripcion(), cirterio)
                || comparacionCadena(leccion.getReferencias(), cirterio)
                || comparacionCadena(leccion.getCategoriaSubcategoria().getNombre(), cirterio);


        return fac;
    }

    public boolean comparacionCadena(String cad, String crit) {
        return cad.toLowerCase().contains(crit.toLowerCase());
    }
}
